import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
let lifeData = {};
try {
	// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
	lifeData = uni.getStorageSync('lifeData');
} catch (e) {

}
// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
let saveStateKeys = [
 'vuex_userInfo',
 'vuex_token',
 'allUnReadNum'
 ];
 // 保存变量到本地存储中
 const saveLifeData = function(key, value) {
 	// 判断变量名是否在需要存储的数组中
 	if (saveStateKeys.indexOf(key) != -1) {
 		// 获取本地存储的lifeData对象，将变量添加到对象中
 		let tmp = uni.getStorageSync('lifeData');
 		// 第一次打开APP，不存在lifeData变量，故放一个{}空对象
 		tmp = tmp ? tmp : {};
 		tmp[key] = value;
 		// 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
 		uni.setStorageSync('lifeData', tmp);
 	}
 }
export default new Vuex.Store({
	/**
	=====================不在saveStateKeys中定义=================
	=====================无需保存到本地【永久】存储，App退出即移除===============，
	*/	
	state:{
		editArea:'',  //编辑地址时所选地点
		isIn:false,  // 记录当前地点是否在范围内
		poiName:'', //精确地址
		locations:'', // 经纬度
		isSelectArea:false,  //用户是否自己选择了地址
		address:null, // 提交订单选择收货地址
		isSubmit:false,  // 用于判断收货地址列表点击是否返回
		isShare:false, // 用于解决uniapp的onShow傻逼bug
		latitude:'',  //当前位置的纬度
		longitude:'',  //当前位置的经度
		whereLocation:'pages/index/index', //记录登录后应该返回的页面地址
		isIndexShoe:false, //首页鞋油圈是否刷新
		isShoe:false,//鞋油圈是否刷新
		locationNow:{name:'',value:''},
		// isChat:false,
		isPay:false, //是否购买成功
		isPlace:false, //首页是否切换了城市
		permissionID:'',
		vuex_OSPlat:uni.getSystemInfoSync().platform,
		vuex_deviceClientID:"",		 //APP手机clientId	
		vuex_version: '1.0.0', //版本信息
		/**
		  ===============如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量，====
		  ===============会【永久存储】，除非主动清除=================
		*/
		vuex_WSObj:null, //全局websocket对象
		vuex_userInfo: lifeData.vuex_userInfo ? lifeData.vuex_userInfo : {}, //当前用户信息
		allUnReadNum:lifeData.allUnReadNum ? lifeData.allUnReadNum : 0
	},
	mutations:{
		$uStore(state, payload) {
			// 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
			let nameArr = payload.name.split('.');
			let saveKey = '';
			let len = nameArr.length;
			if (nameArr.length >= 2) {
				let obj = state[nameArr[0]];
				for (let i = 1; i < len - 1; i++) {
					obj = obj[nameArr[i]];
				}
				obj[nameArr[len - 1]] = payload.value;
				saveKey = nameArr[0];
			} else {
				// 单层级变量，在state就是一个普通变量的情况
				state[payload.name] = payload.value;
				saveKey = payload.name;
			}
			// 保存变量到本地，见顶部函数定义
			saveLifeData(saveKey, state[saveKey])
		},
		// 权限
		setPermissionID(state, provider){
			state.permissionID=provider
			uni.setStorage({ //将用户信息保存在本地
				key: 'permissionID',
				data: provider
			})
		},
		setPlace(state,arg){
			state.isPlace=arg
		},
		setIsPay(state,arg){
			state.isPay=arg
		},
		setChat(state,arg){
			state.isChat=arg
		},
		setLocationNow(state,arg){
			state.locationNow=arg
		},
		setIndexShoe(state,arg){
			state.isIndexShoe=arg
		},
		setShoe(state,arg){
			state.isShoe=arg
		},
		setEditArea(state,arg){
			state.editArea=arg
		},
		setWhereLocation(state,arg){
			state.whereLocation=arg
		},
		setIsIn(state,arg){
			state.isIn=arg
		},
		setPoiName(state,arg){
			state.poiName=arg
		},
		setLocations(state,arg){
			state.locations=arg
		},
		setLocationslongitude(state,arg){
			state.longitude=arg
		},
		setLocationslatitude(state,arg){
			state.latitude=arg
		},
		setIsSelectAre(state,arg){
			state.isSelectArea=arg
		},
		// 提交订单选择收货地址
		setAddress(state,arg){
			state.address=arg
		},
		setIsSubmit(state,arg){
			state.isSubmit=arg
		},
		setIsShare(state,arg){
			state.isShare=arg
		},
	}
})